package scontext

import (
	"context"
	"github.com/go-redis/redis/v8"
	"go.uber.org/zap"
	"gorm.io/gorm"
	"log"
	"sgo/sconfig"
)

type SgoContext struct {
	Ctx         context.Context
	ConfigPath  string             // 配置文件路径
	ViperConfig *sconfig.SgoConfig // viper配置信息
	Validator   *Validator         // validator数据校验
	Logger      *zap.Logger        // 日志
	RedisClient *redis.Client      // redis客户端
	DB          *gorm.DB           // 数据库连接
}

func New(configPath string) *SgoContext {
	return &SgoContext{
		Ctx:        context.TODO(),
		ConfigPath: configPath,
	}
}

func Close(sc *SgoContext) {
	// 关闭数据库连接

	if sc == nil {
		return
	}

	defer func() { sc = nil }()

	if sc.DB != nil {
		db, _ := sc.DB.DB()
		_ = db.Close()
		log.Println("关闭数据库连接...")
	}

	// 关闭Redis连接
	if sc.RedisClient != nil {
		_ = sc.RedisClient.Close()
		log.Println("关闭Redis连接...")
	}

	// todo 此处关闭资源

}
